Classification et régionalisation
Application aux résultats des élections européennes de 2024 en France métropolitiane
Le résumé de votre fiche dans cet encart
1 UN EXEMPLE PEDAGOGIQUE
Afin de bien comprendre la différence entre classification et régionalisation et l’importance de la pondération, nous allons commencer par un exemple très simple portant sur la distribution des votes pour les deux principales listes d’extrême droite dans les 12 régions de France Métropolitaine.
1.1 Présentation des données
On calcule le pourcentage de suffrages exprimés pour les listes conduites par Jordan Bardella (liste n°5 , RN) et Marion Maréchal (liste n°3, Reconquête) à l’échelle des 12 régions de France Métropolitaine (hors Corse). On obtient le tableau suivant :
don <-readRDS("data/net/don_regi.RDS") %>%
mutate(Bardella = 100*vot5/exp,
Marechal = 100*vot3/exp) %>%
select(regi, regi_nom, Bardella, Marechal) %>%
arrange(regi)
don$regi_code<-c("IDF","CVDL","BOFC","NORM","HDFR","GEST","PDLO","BRET",
"NAQU","OCCI","AURA","PACA")
don<-don[,c(1,5,2,3,4)]
kable(don, caption = "Part des suffrages exprimés pour les listes Bardella et Marechal aux élections européennes de 2024 par région", digits = 1)| regi | regi_code | regi_nom | Bardella | Marechal |
|---|---|---|---|---|
| 11 | IDF | Île-de-France | 18.8 | 5.7 |
| 24 | CVDL | Centre-Val de Loire | 34.9 | 5.4 |
| 27 | BOFC | Bourgogne-Franche-Comté | 37.1 | 5.3 |
| 28 | NORM | Normandie | 35.3 | 4.6 |
| 32 | HDFR | Hauts-de-France | 42.4 | 4.6 |
| 44 | GEST | Grand Est | 38.3 | 5.5 |
| 52 | PDLO | Pays de la Loire | 27.6 | 4.7 |
| 53 | BRET | Bretagne | 25.6 | 4.2 |
| 75 | NAQU | Nouvelle-Aquitaine | 30.9 | 5.0 |
| 76 | OCCI | Occitanie | 33.7 | 5.5 |
| 84 | AURA | Auvergne-Rhône-Alpes | 30.9 | 5.6 |
| 93 | PACA | Provence-Alpes-Côte d’Azur | 38.6 | 7.7 |
1.1.1 Paramètres principaux
L’examen des paramètres statistiques des deux listes est effectué à l’intérieur des 12 régions étudiées en excluant la Corse et les DROM. Les valeurs sont dont légèrement différentes des résultats obtenus pour la France entière.
min<-apply(don[,4:5],2,min)
max<-apply(don[,4:5],2,max)
moy<-apply(don[,4:5],2,mean)
ect<-apply(don[,4:5],2,sd)
var<-ect**2
cv<-100*ect/moy
tab<-cbind(min,max,moy,ect,var,cv)
row.names(tab)<-c("Bardella","Marechal")
kable(tab,
caption = "Paramètres principaux des deux listes ",
col.names = c("minimum", "maximum", "moyenne","écart-type","variance","coeff. variation (%)"),
digits=1)| minimum | maximum | moyenne | écart-type | variance | coeff. variation (%) | |
|---|---|---|---|---|---|---|
| Bardella | 18.8 | 42.4 | 32.9 | 6.5 | 42.7 | 19.9 |
| Marechal | 4.2 | 7.7 | 5.3 | 0.9 | 0.8 | 16.7 |
1.1.2 Distribution spatiale
On cartographie la distribution des deux variables en quatre classes à l’aide de la méthode des quantiles (soit trois régions par classe) et on examine la forme des histogrammes correspondant.
## Charge le fonds de carte
map<-readRDS("data/net/map_regi.RDS")
## effectue la jointure
mapdon<-left_join(map,don)
## Cartographie
par(mfrow=c(2,2), cex.main=0.8)
mf_map(mapdon,
type="choro",
var="Bardella",
nbreaks = 4,
method = "quantile",
leg_title = "en %",
leg_val_rnd = 1)
mf_layout("Vote Bardella", frame=T, credits = "", arrow=F)
mf_map(mapdon,
type="choro",
var="Marechal",
nbreaks = 4,
method = "quantile",
leg_title = "en %",
leg_val_rnd = 1)
mf_layout("Vote Marechal", frame=T, credits = "", arrow=F)
mf_distr(don$Bardella, nbins=4, bw=sd(don$Bardella))
mf_distr(don$Marechal, nbins=4,bw = sd(don$Marechal))1.1.3 Partie A.1.1
1.1.4 Partie A.1.2
1.1.5 Partie A.1.3
1.2 Partie A.2
1.3 Partie A.3
1.4 Partie A.4
2 Partie B
2.1 Partie B.1
2.2 Partie B.2
3 Partie C
3.1 Partie C.1
3.2 Partie C.2
3.3 Partie C.3
4 Partie D
4.1 Partie D.1
4.2 Partie D.2
Bibliographie
Annexes
Source des données brutes
le fichier résultats-définitifs-par-circonscriptions.csv est accesible sur le site data.gouv.fr en suivant ce lien. Il présente les résultats définitifs des élections europénnes et a pour origine le Ministère de l’Intérieur. Comme il est très complexe (beaucoup de colonnes redondantes) nous l’avons modifié pour créer des fichiers ne contenant que les colonnes indispensables (effectifs)
le fichier candidats-eur-2024.xlsx est accessible sur le site data.gouv.fr en suivant ce lien. Produit par le ministère de l’intérieur il fournit une information detaillée sur les candidats de chacune des listes. Nous allons en extraire uniquement les caractéristiques des têtes de liste afin de produire un tableau de métadonnées sur les 38 têtes de listes.
le fichier indic-stat-circonscriptions-legislatives-2022.xls a été produit par l’INSEE et est accessible en suivant ce lien. Il fournit un ensemble de données de cadrage sociales et économiques sur les circonscriptions législatives de France à partir des données du recensement de 2022 et de quelques autres sources. Il ne sera pas utilisé directement mais peut servir pour des exercices complémentaires.
le fichier circo_composition.xls également accessible sur le même lien permet de mettre en rapport les circonscription avec les départements, les régions ou les communes. Sachant qu’une même commune peut participer à deux circonscriptions ou plus. On s’en servira principalement pour établir le lien entre circonscriptions et régions.
le fichier france_circonsscriptions_legislatives_2012.json contient un fonds de carte simplifié des circonscriptions législatives en vigueur depuis 2012. C’est une reprise du travail de Toxicode. L’Atelier de cartographie de Sciences Po à ensuite vérifié, nettoyé et généralisé le fond. Il est accessible sur le site data.gouv.fr en suivant ce lien. Il est beaucoup plus léger et mieux généralisé que le fonds de carte fournit par l’INSEE avec les deux ressources précédentes
Préparation des données géométriques
On charge le fichier des circonscriptions en ne conservant que les données de France métropolitaine hors Corse, soit 533 circonscriptions. On le projette en EPSG 2154 puis on l’agrège par département et régions pour disposer de trois fonds de cartes.
# Charge le fonds de carte
map<-st_read("data/raw/france-circonscriptions-legislatives-2012.json")
# Charge la table de correspondance entre circonscriptions, départements et régions
meta<-read_xlsx("data/raw/circo_composition.xlsx",sheet= "table")
# Harmonise les noms et codes de départements et régions
meta <- meta %>%
select(circ=circo, dept= DEP,dept_nom=libdep, regi=REG, regi_nom = libreg) %>%
filter(substr(circ,1,2) == dept) %>% # CORRIGE DES ERREURS DE CODAGE DE L'INSEE
unique()
# Crée la carte des circonscriptions
map_circ <- map %>%
mutate(circ=ID) %>%
select(circ) %>%
left_join (meta) %>%
filter(nchar(dept)<3, # Elimine les DROM
! dept %in% c("2A","2B")) %>% # Elimine la Corse#
arrange(regi, dept,circ) %>%
st_transform(2154) # Change la projection
saveRDS(map_circ, "data/net/map_circ.RDS")
# Agrège par département
map_dept <- map_circ %>% group_by(dept) %>%
summarize(dept_nom=min(dept_nom),
regi=min(regi),
regi_nom = min(regi_nom))
saveRDS(map_dept, "data/net/map_dept.RDS")
# Agrège par région
map_regi <- map_dept %>% group_by(regi) %>%
summarise(regi_nom = min(regi_nom))
saveRDS(map_regi, "data/net/map_regi.RDS")On affiche les trois fonds de carte pour vérification:
# Chargement
map_circ <- readRDS("data/net/map_circ.RDS")
map_dept <- readRDS("data/net/map_dept.RDS")
map_regi <- readRDS("data/net/map_regi.RDS")
# Verification du fonds de carte
mf_map(map_circ, type = "base", col="lightyellow", border="gray80", lwd=0.4)
mf_map(map_dept, type = "base", col=NA, border="gray50", lwd=0.8, add=T)
mf_map(map_regi, type = "base", col=NA, border="gray20", lwd=1.6, add=T)
mf_layout(title = "Superposition des trois fonds de carte",
credits = "Source : Toxicode & Atelier de Cartographie de Science Po
Auteur : Claude Grasland, 2024",
frame = T)Préparation des données électorales
Nous allons extraire du fichier électoral les variables générales de cadrage (inscrits, votants, blancs,nuls, …) et les effectifs bruts de vote pour les candidats des différentes listes par circonscription. Ces deux tableaux seront ensuite agrégés par départements et régions
x<-read.csv2("data/raw/resultats-definitifs-par-circonscription.csv")
# Modification du code des circonscriptions popur adéquation avec les fonds de carte
z<-x$Code.circonscription.législative
x$circ<-paste0(substr(z,1,2),"0",substr(z,3,4))
# Variables générales
gen<- x %>% select(circ ,
ins = Inscrits,
vot = Votants,
abs = Abstentions,
bla = Blancs,
nul = Nuls,
exp = Exprimés)
# Ajout des clés d'agrégation géographiques
map_circ<-readRDS("data/net/map_circ.RDS")
geo<-st_drop_geometry(map_circ)
gen<-left_join(geo,gen)
# Ajout des suffrages par liste
vot <- x[,substr(names(x),1,5) =="Voix."]
a<-rep("vot",38)
b<-1:38
z<-paste0(a,b)
names(vot)<-z
vot$circ<-x$circ
vot<-vot[,c(39,1:38)]
# Tableau final des circonscriptions
don_circ<-left_join(gen,vot)
saveRDS(don_circ,"data/net/don_circ.RDS")
kable(head(don_circ), caption = "Résultats électoraux par circonscription")
# Agrégation par départements
don_dept <-don_circ %>% group_by(dept, dept_nom, regi, regi_nom) %>% summarise_at(2:45,sum)
saveRDS(don_dept,"data/net/don_dept.RDS")
kable(head(don_dept), caption = "Résultats électoraux par département")
# Agrégation par régions
don_regi <-don_circ %>% group_by(regi, regi_nom) %>% summarise_at(4:47,sum)
saveRDS(don_regi,"data/net/don_regi.RDS")
kable(head(don_regi), caption = "Résultats électoraux par région")
# Métadonnées sur les têtes de listes
m<-read_xlsx("data/raw/candidats-eur-2024.xlsx")
m<-m %>% filter(Ordre ==1) %>%
select(code =`Numéro de panneau`,
nom = `Libellé de la liste`,
tete_nom = `Nom sur le bulletin de vote`,
tete_prenom = `Prénom sur le bulletin de vote`,
tete_sexe = Sexe,
tete_nais =`Date de naissance`)
# Ajout de la nuance politique selon le ministère de l'intérieur
typol <- as.character(x[1,substr(names(x),1,6) =="Nuance"] )
m$typol<-typol
saveRDS(m,"data/net/don_listes.RDS")
kable(m, caption = "Description des listes")Vérifications
4.2.1 Agrégation
On vérifie tout d’abord que la procédure d’agrégation a bien donné bien les mêmes totaux au niveau des circonscriptions, départements et régions. Il apparaît que pour chaque niveau le nombre total d’inscrits est bien le même et il ne semble pas utile de vérifier les autres colonnes.
# Chargement des données statistiques
don_circ <- readRDS("data/net/don_circ.RDS")
don_dept <- readRDS("data/net/don_dept.RDS")
don_regi <- readRDS("data/net/don_regi.RDS")
sum(don_circ$ins)[1] 45704587
[1] 45704587
[1] 45704587
4.2.2 Jointure
On affiche trois cartes du vote pour la liste n°5 (Bardella) afin de vérifier si les jointures s’opèrent correctement entre données géométriques et statistiques.
# Chargement des données géométriques
map_circ <- readRDS("data/net/map_circ.RDS")
map_dept <- readRDS("data/net/map_dept.RDS")
map_regi <- readRDS("data/net/map_regi.RDS")
# Choix de la palette et des classes
mypal <-brewer.pal(9,"Blues")
mybreaks=c(0,15,20,25,30,35,40, 45,50,100)
# Carte par région
mapdon <- left_join(map_regi, don_regi) %>%
mutate(vot = vot5, pct = 100*vot5/exp) %>%
select(vot,pct)
mf_map(mapdon, type="choro", var="pct",
breaks=mybreaks,
pal=mypal,
leg_val_rnd = 0, leg_pos = "left", leg_title = "% suffrages exprimés")
mf_map(mapdon, type="prop", var="vot", inches = 0.1, leg_pos="topleft", leg_title = "Nb. de voix")
mf_layout(title = "Vote Bardella aux élections européennes de 2024 par régions",
credits = "Source : INSEE, IGN, Ministère de l'Intérieur",
frame=T, arrow=F)# Carte par département
mapdon <- left_join(map_dept, don_dept) %>%
mutate(vot = vot5, pct = 100*vot5/exp) %>%
select(vot,pct)
mf_map(mapdon, type="choro", var="pct",
breaks=mybreaks,
pal=mypal,
leg_val_rnd = 0, leg_pos = "left", leg_title = "% suffrages exprimés")
mf_map(mapdon, type="prop", var="vot", inches = 0.1, leg_pos="topleft", leg_title = "Nb. de voix")
mf_layout(title = "Vote Bardella aux élections européennes de 2024 par régions",
credits = "Source : INSEE, IGN, Ministère de l'Intérieur",
frame=T, arrow=F)# Carte par circonscription (zoom sur l'Occitanie)
mapdon <- left_join(map_circ, don_circ) %>%
filter(regi_nom=="Occitanie") %>%
mutate(vot = vot5, pct = 100*vot5/exp) %>%
select(vot,pct)
mf_map(mapdon, type="choro", var="pct",
breaks=mybreaks,
pal=mypal,
leg_val_rnd = 0, leg_pos = "left", leg_title = "% suffrages exprimés")
mf_map(mapdon, type="prop", var="vot", inches = 0.1, leg_pos="topleft", leg_title = "Nb. de voix")
mf_layout(title = "Vote Bardella aux élections européennes de 2024 par circonscription en région Occitanie",
credits = "Source : INSEE, IGN, Ministère de l'Intérieur",
frame=T, arrow=F)Info session
| setting | value |
|---|---|
| version | R version 4.4.1 (2024-06-14) |
| os | macOS 15.1 |
| system | x86_64, darwin20 |
| ui | X11 |
| language | (EN) |
| collate | en_US.UTF-8 |
| ctype | en_US.UTF-8 |
| tz | Europe/Paris |
| date | 2024-12-18 |
| pandoc | 3.2 @ /Applications/RStudio.app/Contents/Resources/app/quarto/bin/tools/x86_64/ (via rmarkdown) |
| package | ondiskversion | source |
|---|---|---|
| dplyr | 1.1.4 | CRAN (R 4.4.0) |
| knitr | 1.49 | CRAN (R 4.4.1) |
| mapsf | 0.12.0 | CRAN (R 4.4.1) |
| RColorBrewer | 1.1.3 | CRAN (R 4.4.0) |
| readxl | 1.4.3 | CRAN (R 4.4.0) |
| sf | 1.0.19 | CRAN (R 4.4.1) |
Citation
Grasland C (2024). “Classification et Régionalisation.”, doi:10.48645/xxxxxx https://doi.org/10.48645/xxxxxx,, https://rzine.fr/publication_rzine/xxxxxxx/.
BibTex :
@Misc{,
title = {Classification et Régionalisation},
subtitle = {Application aux résultats des élections européennes de 2024 en France métropolitiane},
author = {Claude Grasland},
doi = {10.48645/xxxxxx},
url = {https://rzine.fr/publication_rzine/xxxxxxx/},
keywords = {FOS: Other social sciences},
language = {fr},
publisher = {FR2007 CIST},
year = {2024},
copyright = {Creative Commons Attribution Share Alike 4.0 International},
}